package com.weiai.wedding.util;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

/**
 * 上传 工具类，根据上传文件格式获得 对应domian 和 domain 对应path
 * 一种格式可能有多个 domain 一个domain 也可能有多个path
 * 目前：根据上传文件格式获得domain组，然后随机选取一个domain,
 * 然后根据这个domian 获得 对应的path 组，再随机取得一个path
 * @author Administrator
 *
 */
@Component
public class UploadDomainUtil {

	private Map<String, Map<String,String>> domainMap = null;

	/**
	 * 根据后缀获取domain 和 domain 对应的 一个path
	 * @param suffix
	 * @return 0 domain 1 path
	 */
	public  Map<String,String> getUploadDomainAndPath(String suffix){
		if(domainMap==null)return null;
		String domainKey=getDomainKey(suffix);

		Map<String,String> domainPathMap=domainMap.get(domainKey);
		if(domainPathMap!=null){
			Set<String> keySet=domainPathMap.keySet();
			if(keySet!=null){
				//随机获得domain
				Object[] domainArray=keySet.toArray();
				int index=(int)(Math.random()*domainArray.length);
				String domain=domainArray[index]!=null?domainArray[index].toString():null;
				String path=domainPathMap.get(domainArray[index]);
				//String[] str={domain,path};
				Map<String,String> map=new HashMap<String,String>();
				map.put("domain", domain);
				map.put("path", path);
				return map;
			}
		}
		return null;
	}
	
//	/**
//	 * 根据后缀获得 domain
//	 * @param suffix 后缀
//	 * @return
//	 */
//	public  String getUploadDomain(String suffix){
//		if(domainMap==null)return null;
//		String domainKey=getDomainKey(suffix);
//		Map<String,String> domainPathMap=domainMap.get(domainKey);
//		
//		if(domainPathMap!=null){
//			Set<String> keySet=domainPathMap.keySet();
//			if(keySet!=null){
//				//随机获得domain
//				Object[] domainArray=keySet.toArray();
//				int index=(int)(Math.random()*domainArray.length);
//				String domain=domainArray[index]!=null?domainArray[index].toString():null;
//				
//				return domain;
//			}
//		}
//		
//		return null;
//	}
//	
//	/**
//	 * 根据 domain 获取path
//	 * @param domain
//	 * @return
//	 */
//	public  String getUploadPathByDomain(String domain){
//		
//		if(domain==null||domainMap==null) return null;
//		
//		Iterator<Entry<String, Map<String, String>>> iter = domainMap.entrySet().iterator();
//
//		while (iter.hasNext()) {
//			Map.Entry<String, Map<String, String>> entry = (Map.Entry<String, Map<String, String>>) iter.next(); 
//			Map<String,String> val =(Map<String,String>)entry.getValue();
//			
//			if(val!=null){
//				Iterator<Entry<String, String>> valIter = val.entrySet().iterator();
//				while(valIter.hasNext()){
//					Map.Entry<String, String> valEntry = (Map.Entry<String, String>) valIter.next(); 
//					if(domain.equals(valEntry.getKey())){
//							return valEntry.getValue();
//					}
//				}
//			}
//		}
//		
//		return null;
//	}
	

	 /**
	  * 根据后缀获得domain key
	  * @param suffix
	  * @return
	  */
	 private String getDomainKey(String suffix){
		//获取 domain key
		 if(StringUtils.isNotBlank(suffix)){
			 if(suffix.indexOf(".")<0){
				 suffix="."+suffix;
			 }
		 }
		String key=Constants.UPLOAD_DOMAIN_KEY_DEFAULT;
		if(StringUtils.isBlank(suffix)){
			//返回默认domain key
			key=Constants.UPLOAD_DOMAIN_KEY_DEFAULT;
		}else if(Arrays.asList(Constants.IMAGE_SUFFIX).contains(suffix.toLowerCase())){
			//返回图片domain key
			key=Constants.UPLOAD_DOMAIN_KEY_IMAGE;
		}else if(Arrays.asList(Constants.VIDEO_SUFFIX).contains(suffix.toLowerCase())){
			//返回视频domain key
			key=Constants.UPLOAD_DOMAIN_KEY_VIDEO;
		}else if(Arrays.asList(Constants.DOC_SUFFIX).contains(suffix.toLowerCase())){
			//返回文档 domain key
			key=Constants.UPLOAD_DOMAIN_KEY_DOC;
		}
		return key;
	 }
	 
	 
	 public String getType(String suffix){
			//获取 domain key
			 if(StringUtils.isNotBlank(suffix)){
				 if(suffix.indexOf(".")<0){
					 suffix="."+suffix;
				 }
			 }
			String type=null;
			if(Arrays.asList(Constants.IMAGE_SUFFIX).contains(suffix.toLowerCase())){
				//返回图片domain key
				type=Constants.IMG;
			}else if(Arrays.asList(Constants.VIDEO_SUFFIX).contains(suffix.toLowerCase())){
				//返回视频domain key
				type=Constants.VIDEO;
			}
			return type;
		 }
	 public Map<String,Map<String,String>> getDomainMap() {
		return domainMap;
	 }
	 
	 public void setDomainMap(Map<String,Map<String,String>> domainMap) {
	  this.domainMap = domainMap;
	 }

}
